Міністерство освіти і науки України
Національний університет „Львівська політехніка”
Кафедра ЕОМ
Звіт
Про виконання лабораторної роботи № 3
з програмування
Тема: Лабіринт
.
Мета:Навчитися реалізовувати програму проходження матриць.
Завдання: 28. Матриця розміру N*M визначає деякий лабіринт. B матриці елемент 1 означає стіну, а 0 означає вільне місце. В першому рядку матриці визначаються входи x(і), а в останньому виходи y(і), і=1,..,k, що повинні бути нульовими елементами. Рух у лабіринті здійснюється тільки по вертикалі або горизонталі.
Визначити, чи можна :
а) провести людину через лабіринт від заданого входу в лабіринт до заданого виходу;
б) провести k людина від входу x(і) до виходу y(і) відповідно, і=1,..,k, таким чином, щоб кожне вільне місце відвідувалось не більше одного разу;
в) те ж, але людину можна виводити через кожний з виходів.
повідомляти користувача.
Програма
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <stdlib.h>
#include <windows.h>
#include <assert.h>
struct node
{
int data;
char ch;
struct node *next;
};
typedef struct node *list;
int k=0;
//³í³ö³àî³çàö³ÿ
void Init(list *head_list_ptr)
{
*head_list_ptr = NULL;
return;
}
// ïåðåâ³ðêà ÷è ñïèñîê ïîðîæí³é
int Empty(list head_list)
{
return head_list == NULL;
}
//Äîäàâàííÿ â ê³íåöü ñïèñêó
void AddEnd(list *head_list_ptr,int new_data,char new_ch )
{
list new_node;
list new_node1=*head_list_ptr;
new_node = malloc(sizeof(struct node));
new_node->data = new_data;
new_node->ch =new_ch;
new_node->next = NULL;
if (Empty(*head_list_ptr)) *head_list_ptr = new_node;
else
{
if(new_node1)while (new_node1->next) new_node1 =new_node1->next ;
new_node1->next = new_node;
//FindLast(*head_list_ptr)->next = new_node;
//new_node1=FindLast(*head_list_ptr);
//new_node1->next = new_node;
}
return ;
}
//Ïîøóê îñòàííüîãî åëåìåíòà ñïèñêó
list FindLast(list head_list)
{
if (head_list) while (head_list->next) head_list = head_list->next;
return head_list;
}
//ïîøóê âóçëà ïåðåä çàäàíèì çíà÷åííÿì
list FindBefore(list head_list, list node)
{
while ((head_list->next != node) && head_list) head_list = head_list->next;
return head_list;
}
list FindAfter(list node)
{
return node->next;
}
list Find(list head_list,int search_data)
{
while ((head_list) && (head_list->data != search_data)) head_list = head_list->next;
return head_list;
}
// Âèëó÷åííÿ çàäàíîãî âóçëà ç³ ñïèñêó
void Delete(list *head_list_ptr, list *node_ptr)
{
list tmp , save_ptr=*node_ptr;
assert(*head_list_ptr);
assert(*node_ptr);
if (*node_ptr == *head_list_ptr)
*head_list_ptr = (*head_list_ptr)->next;
else
if (!((*node_ptr)->next))
{
tmp = FindBefore(*head_list_ptr,*node_ptr);
tmp->next = NULL;
}
else
{
tmp = (*node_ptr)->next;
(*node_ptr)->data = tmp->data;
(*node_ptr)->next = tmp->next;
save_ptr = tmp;
};
free(save_ptr);
return ;
}
/****Ôóíêö³ÿ âèâåäåííÿ êèðèëèö³****/
void cyrillic(char* text)
{
char* x;
int l,i,size=sizeof(text);
l=strlen(text);
x=(char*)malloc(size);
for(i=0;i<l;i++)
{
x[i]=text[i];
if(x[i]=='³')x[i]='i';
if(x[i]=='²')x[i]='I';
}
x[i]='\0';
CharToOem(x,x);
printf(x);
}
void fff(char* f,int m,int n)
{
int i=0,j=0,vh,vuh;
cyrillic("\n\tÂâåä³òü âõ³ä\n");
scanf("%d",&vh);
cyrillic("\n\tÂâåä³òü âèõ³ä\n");
scanf("%d",&vuh);
i=vh;
f[i]='0';
if (f[i+n+2]!='1' && f[(n+2)*m+vuh]!='1')
{
while((i!=vh && j!=0) || (i==vh && j==0)) //|| i!=(n+2)*m+vuh
{
if(i==(n+2)*m+vuh) break;
i= Prohid( f,i,n);
j++;
}
}
cyrillic("\n\tÐÅÇÓËÜÒÀÒ\n");
if(i==(n+2)*m+vuh)
{
f[i]='|';
f[i+n+2]='|';
cyrillic("\n\tÏðîõ³ä º\n");
}
else cyrillic("\n\tÏðîõîäó íåìà\n");
for(i=0;i<m+2;i++)
{
for(j=0;j<n+2;j++)
{
//x[n*i+j]=x[n*i+j]+
printf("%c",f[(n+2)*i+j]);
}
printf("\n");
}
}
/////////////////////////////////////////////////////////////////////////////////
void f11(char* f,int m,int n...